K-Nearest Neighbors (KNN) হল একটি সহজ এবং জনপ্রিয় মেশিন লার্নিং অ্যালগরিদম যা ক্লাসিফিকেশন এবং রিগ্রেশন সমস্যাগুলির জন্য ব্যবহৃত হয়। এটি একটি নন-প্যারামেট্রিক অ্যালগরিদম, অর্থাৎ এটি কোনও মডেল তৈরি করে না, বরং ডেটার গঠন বা রূপের উপর ভিত্তি করে কাজ করে। KNN মডেলটি নতুন ডেটা পয়েন্টের জন্য পূর্বাভাস দেয় তার কনিকালে (nearest) প্রতিবেশী পয়েন্টগুলির গুনান্বিত গুণের মাধ্যমে।
KNN এর মৌলিক ধারণা
KNN মূলত একটি নন-লাইনার ক্লাসিফিকেশন অ্যালগরিদম যা ডেটা পয়েন্টগুলির কাছাকাছি প্রতিবেশীদের (neighbors) মধ্যে গঠন বা সম্পর্ক খুঁজে বের করে।
KNN মডেলটি নিম্নলিখিত প্রক্রিয়া অনুসরণ করে:
- ডেটা পয়েন্ট নির্বাচন:
মডেলটি প্রশিক্ষণের সময় ডেটাসেটের প্রতিটি পয়েন্টের জন্য একটি ভেক্টর (এটা ফিচারের মান হিসেবে) তৈরি করে। যখন নতুন ডেটা পয়েন্ট আসে, তখন তার প্রতিবেশী পয়েন্টগুলি খুঁজে বের করার জন্য নির্দিষ্ট একটি সংখ্যা ব্যবহার করা হয়। ক্যালকুলেটিং দূরত্ব:
ডেটা পয়েন্টগুলির মধ্যে দূরত্ব গণনা করতে ইউক্লিডিয়ান দূরত্ব (Euclidean Distance) অথবা মাহলানবিস দূরত্ব (Mahalanobis Distance) ব্যবহার করা হয়। ইউক্লিডিয়ান দূরত্ব হলো দুটি পয়েন্টের মধ্যে সরল রেখার দূরত্ব।- প্রতিবেশী নির্বাচন:
সংখ্যক সবচেয়ে কাছাকাছি প্রতিবেশী ডেটা পয়েন্ট নির্বাচন করা হয়। - ক্লাস বা মান নির্বাচন:
- ক্লাসিফিকেশন: যদি KNN ক্লাসিফিকেশন সমস্যা সমাধান করে, তবে নির্বাচিত প্রতিবেশীদের মধ্যে সবচেয়ে সাধারণ শ্রেণী বা ক্লাস নির্বাচন করা হয়।
- রিগ্রেশন: যদি KNN রিগ্রেশন সমস্যা সমাধান করে, তবে প্রতিবেশীদের গড় মান (mean value) নেওয়া হয়।
- প্রেডিকশন:
এরপর, নতুন ডেটা পয়েন্টের জন্য তার শ্রেণী বা মান পূর্বাভাস করা হয়।
KNN মডেল ট্রেনিং এবং প্রেডিকশন
KNN একটি লেজি লার্নিং মেথড, অর্থাৎ এটি কোনো মডেল প্রশিক্ষণ করে না। মডেল তৈরি করার জন্য কেবল ডেটার মধ্যে প্রতিবেশী পয়েন্টগুলির গঠন বিশ্লেষণ করা হয়। সুতরাং, এটি ইনস্ট্যান্স-ভিত্তিক লার্নিং (instance-based learning) অ্যালগরিদম হিসেবে পরিচিত।
KNN এর স্টেপ বাই স্টেপ প্রক্রিয়া:
- ট্রেনিং ডেটা সেট সংগ্রহ: প্রথমে একটি ডেটাসেট সংগ্রহ করুন।
- কিউরির জন্য প্রতিবেশী খুঁজে বের করা: যখন একটি নতুন ডেটা পয়েন্ট আসে, তখন সেটির সাথে সবচেয়ে কাছাকাছি প্রতিবেশী খুঁজে বের করুন।
- ক্লাসিফিকেশন বা রিগ্রেশন:
- ক্লাসিফিকেশন: প্রতিবেশী পয়েন্টের মধ্যে সবচেয়ে প্রচলিত শ্রেণী নির্বাচন করুন।
- রিগ্রেশন: প্রতিবেশী পয়েন্টের গড় মান বের করুন।
- প্রেডিকশন প্রদান করুন: নতুন ডেটা পয়েন্টের জন্য তার শ্রেণী বা মান পূর্বাভাস করুন।
KNN এর উদাহরণ
নিচে একটি উদাহরণ দেওয়া হলো, যেখানে Scikit-Learn ব্যবহার করে KNN মডেল তৈরি করা হয়েছে:
কোড উদাহরণ (Scikit-Learn ব্যবহার করে):
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
# Iris ডেটাসেট লোড করা
iris = load_iris()
X, y = iris.data, iris.target
# ডেটা ট্রেন এবং টেস্ট সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# KNN মডেল তৈরি করা
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)
# প্রেডিকশন করা
y_pred = model.predict(X_test)
# মডেলের পারফরম্যান্স মূল্যায়ন করা
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
এখানে:
KNeighborsClassifier(n_neighbors=3): প্রতিবেশী নির্বাচন করা হয়েছে।train_test_split(): ডেটা ট্রেন এবং টেস্ট সেটে ভাগ করা হয়েছে।accuracy_score(): মডেলের পারফরম্যান্স মূল্যায়ন করা হয়েছে।
KNN এর উপকারিতা:
- সহজ এবং ব্যাখ্যা করা সহজ: KNN একটি সরল অ্যালগরিদম, যার মধ্যে কোন জটিল মডেল তৈরি করতে হয় না।
- বিভিন্ন সমস্যায় ব্যবহারযোগ্য: KNN ক্লাসিফিকেশন এবং রিগ্রেশন উভয় ক্ষেত্রেই ব্যবহার করা যেতে পারে।
- ডেটা লেবেলিং: KNN কোন পূর্বধারণা বা লেবেল ছাড়াই কাজ করে এবং এটি নতুন ডেটা পয়েন্টকে খুবই কার্যকরভাবে শ্রেণীভুক্ত করতে পারে।
KNN এর সীমাবদ্ধতা:
- কম্পিউটেশনাল খরচ: KNN একটি লেজি লার্নিং অ্যালগরিদম, অর্থাৎ এটি প্রতিটি টেস্ট পয়েন্টের জন্য প্রতিবেশী খুঁজে বের করতে ডেটার পুরো স্যাম্পল ব্যবহার করে। বড় ডেটাসেটের জন্য এটি অত্যন্ত ধীরগতি হতে পারে।
- ডেটা স্কেলিং: KNN দূরত্বের উপর ভিত্তি করে কাজ করে, তাই ডেটা যদি বিভিন্ন স্কেলে থাকে, তবে এটি সঠিকভাবে কাজ নাও করতে পারে। তাই ডেটা স্কেলিং বা নরমালাইজেশন অত্যন্ত গুরুত্বপূর্ণ।
KNN এর অপ্টিমাইজেশন
KNN এর পারফরম্যান্সের উপর বেশ কয়েকটি উপাদান প্রভাবিত করতে পারে:
- K এর মান নির্বাচন: -এর মান খুব ছোট হলে মডেলটি অত্যধিক প্রশিক্ষিত (overfit) হতে পারে, এবং খুব বড় হলে এটি সাধারণীকরণ (underfit) হতে পারে।
- ডেটা স্কেলিং: ডেটা ফিচারগুলির স্কেল নরমালাইজ করতে হবে, যেমন MinMaxScaler বা StandardScaler ব্যবহার করে।
সারাংশ
K-Nearest Neighbors (KNN) একটি সহজ, নন-প্যারামেট্রিক এবং ইনস্ট্যান্স-ভিত্তিক মেশিন লার্নিং অ্যালগরিদম যা ক্লাসিফিকেশন এবং রিগ্রেশন কাজের জন্য ব্যবহৃত হয়। এটি নতুন ডেটা পয়েন্টের জন্য সম্ভাব্য ক্লাস বা মান পূর্বাভাস করতে প্রতিবেশীদের কাছাকাছি সম্পর্কের উপর নির্ভর করে। KNN এর প্রধান সুবিধা হল এর সহজতা, তবে এটি বড় ডেটাসেটের জন্য কম্পিউটেশনালভাবে ব্যয়বহুল হতে পারে।
K-Nearest Neighbors (KNN) একটি সহজ এবং জনপ্রিয় ক্লাসিফিকেশন এবং রিগ্রেশন অ্যালগরিদম যা মেশিন লার্নিংয়ে ব্যবহৃত হয়। এটি একটি এগজাম্পল-বেসড অ্যালগরিদম, যার মাধ্যমে ডেটার প্যাটার্ন শেখার জন্য নতুন ডেটা পয়েন্টকে তার নিকটতম প্রতিবেশী (nearest neighbors) এর মাধ্যমে শ্রেণীবদ্ধ করা হয়। KNN অ্যালগরিদমের মূল ধারণা হলো, একটি পয়েন্টের শ্রেণী বা মান সেই পয়েন্টের নিকটতম প্রতিবেশীদের শ্রেণী বা মানের উপর নির্ভর করে।
KNN এর মৌলিক ধারণা:
KNN একটি নন-প্যারামেট্রিক এবং বাইরিজিয়ান পদ্ধতি যা কেবল ডেটা পয়েন্ট এবং তাদের সম্পর্কের উপর ভিত্তি করে কাজ করে, কোনও পূর্বধারণা বা মডেল তৈরি না করেই। এটি নির্ধারণকারী অ্যালগরিদম, যার মাধ্যমে কোনও নতুন ডেটা পয়েন্টের শ্রেণী বা মান পূর্বাভাস করা হয় তার প্রতিবেশী ডেটা পয়েন্টের শ্রেণী বা মানের ভিত্তিতে।
KNN কাজ করার পদ্ধতি:
KNN কাজ করার সময় তিনটি প্রধান ধাপ থাকে:
নিউ পয়েন্টের জন্য প্রতিবেশী খুঁজে বের করা:
- নতুন ইনপুট ডেটা পয়েন্টের জন্য, এটি সেই ডেটা পয়েন্টের নিকটতম Kটি প্রতিবেশী খুঁজে বের করতে কাজ শুরু করে। সাধারণত, ইউক্লিডিয়ান ডিসট্যান্স ব্যবহার করা হয় প্রতিবেশী খুঁজে বের করার জন্য, তবে অন্য ধরনের দূরত্ব হিসাবেও ব্যবহার করা যেতে পারে (যেমন, ম্যানহাটন, কসমাইন, ইত্যাদি)।
ইউক্লিডিয়ান ডিসট্যান্সের সূত্র হলো:
যেখানে এবং দুটি পয়েন্টের কোঅর্ডিনেটস।
- K প্রতিবেশীর শ্রেণী নির্ধারণ:
- একবার K প্রতিবেশী খুঁজে পাওয়া গেলে, তাদের শ্রেণী বা মান গুণগতভাবে গোনা হয়।
- যদি ক্লাসিফিকেশন সমস্যা হয়, তাহলে K প্রতিবেশী মধ্যে যেটি সবচেয়ে বেশি আসে সেটি নির্বাচিত শ্রেণী হিসেবে গণ্য হবে।
- যদি রিগ্রেশন সমস্যা হয়, তাহলে K প্রতিবেশীর মানের গড় (বা মধ্যম) বের করা হয়।
- নতুন পয়েন্টের শ্রেণী নির্ধারণ:
- অবশেষে, সবচেয়ে সাধারণ শ্রেণী বা মানটি নতুন ডেটা পয়েন্টের জন্য পূর্বাভাস হিসেবে নির্ধারিত হয়।
KNN এর উদাহরণ:
ধরা যাক, আমাদের একটি ডেটাসেট আছে যেখানে বিভিন্ন প্রকারের ফলের বৈশিষ্ট্য (যেমন আকার, রঙ, ওজন) এবং তাদের শ্রেণী (আপেল, কমলা, কলা ইত্যাদি) দেওয়া আছে। একটি নতুন ফল এসেছে, যার বৈশিষ্ট্যগুলি অজানা, এবং আমরা এটি কোন শ্রেণীতে অন্তর্ভুক্ত হবে তা জানাতে চাই। KNN এই কাজটি করবে।
- KNN প্রথমে ডেটাসেটে থাকা ফলগুলির (আপেল, কমলা, কলা) মধ্যে n-নিকটতম (K) ফল খুঁজে বের করবে যা নতুন ফলের বৈশিষ্ট্যের সাথে সবচেয়ে কাছাকাছি।
- এরপর, K প্রতিবেশী ফলের মধ্যে যে শ্রেণী সবচেয়ে বেশি আছে (যেমন, ৪টি আপেল, ১টি কমলা), সেটিই নতুন ফলের শ্রেণী হিসেবে নির্ধারণ করবে।
KNN এর মূল বৈশিষ্ট্য:
- বাইরিজিয়ান মডেল:
KNN কোনও মডেল তৈরি না করেই ডেটা পয়েন্টের সম্পর্কের মাধ্যমে কাজ করে। এটি একটি "লেজি" লার্নিং অ্যালগরিদম, কারণ মডেলটি প্রশিক্ষণ না নিয়ে শুধুমাত্র ডেটা পয়েন্টের কাছাকাছি প্রতিবেশী দেখে। - নন-প্যারামেট্রিক:
KNN প্যারামিটার নির্ভর নয়। এর মানে হলো এটি কোন নির্দিষ্ট ফাংশন বা মডেলের অনুমান করে না, বরং ডেটা পয়েন্টের আসল সম্পর্কের উপর ভিত্তি করে কাজ করে। - এগজাম্পল-বেসড:
KNN একটি এগজাম্পল-বেসড মেথড, যেখানে এটি নতুন ডেটা পয়েন্টের জন্য প্রশিক্ষণের সময়ে একটি মডেল তৈরি না করে বরং ডেটার মূল সম্পর্ক এবং প্রতিবেশীর উপর ভিত্তি করে পূর্বাভাস প্রদান করে।
KNN এর সুবিধা এবং সীমাবদ্ধতা:
সুবিধা:
- সহজ এবং কার্যকর:
KNN একটি সহজ অ্যালগরিদম, এবং এটি ছোট বা মাঝারি আকারের ডেটা সেটের জন্য কার্যকরী। - কোনো প্রশিক্ষণ ফেজ প্রয়োজন হয় না:
মডেলটি সরাসরি ডেটার উপর ভিত্তি করে কাজ করে, কোনো প্রশিক্ষণ প্রক্রিয়া ছাড়াই। - বহু শ্রেণির সমর্থন:
KNN একটি মাল্টি-ক্লাস ক্লাসিফিকেশন সমস্যার সমাধান করতে পারে, যেখানে একাধিক শ্রেণী থাকে।
সীমাবদ্ধতা:
- কম্পিউটেশনাল খরচ:
KNN একটি কম্পিউটেশনালি ভারী অ্যালগরিদম, কারণ এটি নতুন ডেটার জন্য প্রতিবেশী খুঁজতে পুরো ডেটাসেটের উপর নির্ভর করে। তাই বড় ডেটাসেটের জন্য এটি ধীর হতে পারে। - স্কেলিং সমস্যাগুলি:
KNN ডেটার স্কেলিংয়ের উপর অত্যধিক নির্ভরশীল। যদি ডেটা ভিন্ন স্কেলে থাকে (যেমন, কিছু বৈশিষ্ট্য 0-1 এর মধ্যে এবং কিছু বৈশিষ্ট্য হাজারের মধ্যে), তবে এটি সঠিকভাবে কাজ নাও করতে পারে। এজন্য স্ট্যান্ডার্ড স্কেলিং প্রয়োজন। - উচ্চমাত্রিক ডেটা:
উচ্চমাত্রিক (high-dimensional) ডেটার ক্ষেত্রে KNN ভালভাবে কাজ নাও করতে পারে। এই ধরনের ডেটাতে ক্লিপ-ফাইটিং (curse of dimensionality) সমস্যা দেখা দিতে পারে।
সারাংশ:
K-Nearest Neighbors (KNN) একটি সোজা এবং জনপ্রিয় ক্লাসিফিকেশন এবং রিগ্রেশন অ্যালগরিদম। এটি নতুন ডেটার শ্রেণী বা মান পূর্বাভাস করতে নিকটতম প্রতিবেশীদের কাছ থেকে শিখে। এটি সিম্পল এবং কার্যকর, তবে বড় ডেটাসেট বা উচ্চমাত্রিক ডেটার ক্ষেত্রে কিছু সমস্যা হতে পারে।
Distance Metrics মেশিন লার্নিং এবং ডেটা সায়েন্সে ব্যবহৃত গুরুত্বপূর্ণ ধারণা। এটি দুইটি বা তার অধিক পয়েন্টের মধ্যে দূরত্ব পরিমাপ করতে ব্যবহৃত হয়। বিশেষ করে ক্লাস্টারিং, ক্লাসিফিকেশন এবং রিগ্রেশন মডেলগুলিতে ব্যবহৃত হয়, যেমন K-Nearest Neighbors (KNN), K-Means Clustering, এবং Support Vector Machines (SVM)-এ। দুটি জনপ্রিয় এবং গুরুত্বপূর্ণ distance metric হল Euclidean Distance এবং Manhattan Distance।
১. Euclidean Distance (ইউক্লিডিয়ান দূরত্ব)
Euclidean Distance হলো সাধারণত ব্যবহৃত নির্মাণমূলক (straight-line) দূরত্ব, যা দুইটি পয়েন্টের মধ্যে সরাসরি (লিনিয়ার) দূরত্ব পরিমাপ করে। এটি পিথাগোরিয়ান থিওরেম ব্যবহার করে হিসাব করা হয়। দুটি পয়েন্টের মধ্যে Euclidean Distance হল দুইটি পয়েন্টের ফিচারগুলির মধ্যে ত্রিকোণমিতিক ফাঁক (hypotenuse)।
ফর্মুলা:
যদি দুইটি পয়েন্ট থাকে:
- পয়েন্ট ১:
- পয়েন্ট ২:
তাহলে Euclidean Distance হবে:
এটি 2D বা 3D স্পেসেও প্রযোজ্য। 3D স্পেসে তিনটি ডাইমেনশন থাকবে:
Euclidean Distance উদাহরণ:
ধরা যাক, পয়েন্ট ১: এবং পয়েন্ট ২: , তাহলে Euclidean Distance হবে:
এটি সরল লাইন (স্ট্রেইট লাইন) হিসাবে পরিমাপ করা হয়েছে।
২. Manhattan Distance (ম্যানহ্যাটন দূরত্ব)
Manhattan Distance (বা Taxicab Distance) হলো দুটি পয়েন্টের মধ্যে একাধিক কোণে সরাসরি চলাচল করার মাধ্যমে পরিমাপ করা দূরত্ব। এটি শহরের রাস্তার নেটওয়ার্কের মত কাজ করে, যেখানে আপনি শুধুমাত্র অনুভূমিক বা উল্লম্ব পথে চলতে পারেন এবং এটি এক্স-অক্ষ এবং ওয়াই-অক্ষের মধ্যে মোট পরিমাণ যোগফল হিসাব করা হয়।
ফর্মুলা:
যদি দুইটি পয়েন্ট থাকে:
- পয়েন্ট ১:
- পয়েন্ট ২:
তাহলে Manhattan Distance হবে:
এটি 2D অথবা 3D স্পেসেও প্রযোজ্য। 3D স্পেসে Manhattan Distance হবে:
Manhattan Distance উদাহরণ:
ধরা যাক, পয়েন্ট ১: এবং পয়েন্ট ২: , তাহলে Manhattan Distance হবে:
এখানে, এটি অনুভূমিক এবং উল্লম্ব পথ ধরে পরিমাপ করা হয়েছে।
Euclidean এবং Manhattan Distance এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | Euclidean Distance | Manhattan Distance |
|---|---|---|
| পদ্ধতি | সরাসরি (লিনিয়ার) দূরত্ব পরিমাপ | অনুভূমিক এবং উল্লম্ব পথে দূরত্ব পরিমাপ |
| ফর্মুলা | ( | |
| ব্যবহার | মেট্রিক স্পেসে সরাসরি দূরত্ব পরিমাপ | শহর রাস্তা নেটওয়ার্কে বা গ্রিড স্পেসে ব্যবহৃত |
| আকৃতি | কোণযুক্ত সম্পর্কের জন্য বেশি ব্যবহৃত | পথের জন্য ব্যবহৃত, যেমন শহরের রাস্তা বা গ্রিড |
| ব্যবহার ক্ষেত্র | সাধারণত উচ্চ মাত্রার ডেটার জন্য ব্যবহৃত | কম্পিউটেশনের জন্য সাধারণত ব্যবহার হয়, সহজ এবং দ্রুত |
| ব্যবহার | অধিকাংশ মেশিন লার্নিং অ্যালগরিদমে ব্যবহৃত | KNN, অ্যালগরিদমের জন্য উপযুক্ত, যখন ভিন্ন ভিন্ন রাস্তায় কাজ করতে হয় |
সারাংশ:
- Euclidean Distance দুইটি পয়েন্টের মধ্যে সরাসরি (লিনিয়ার) দূরত্ব পরিমাপ করে এবং এটি সাধারণত ব্যবহৃত হয় যখন দুইটি পয়েন্টের মধ্যে একটি সোজা লাইন অথবা রাস্তা পরিমাপ করা হয়।
- Manhattan Distance দুইটি পয়েন্টের মধ্যে অনুভূমিক এবং উল্লম্ব পথে চলতে পরিমাপ করা দূরত্ব হিসাব করে, যা শহরের রাস্তা নেটওয়ার্কের মত কাজ করে।
এই দুটি দূরত্ব মেট্রিকের মধ্যে পার্থক্য বুঝতে হলে, তাদের ব্যবহার এবং প্রয়োগের দিক থেকে পার্থক্য উপলব্ধি করা দরকার। Euclidean সাধারণত জ্যামিতিক অবস্থানে এবং Manhattan ব্যবহার করা হয় যখন পথ সীমাবদ্ধ বা নেটওয়ার্কের মাধ্যমে চলাচল করতে হয়।
K-Nearest Neighbors (KNN) একটি খুবই জনপ্রিয় এবং সহজ মেশিন লার্নিং অ্যালগরিদম যা supervised learning এর মধ্যে পড়ে। KNN মূলত classification এবং regression উভয় সমস্যা সমাধানে ব্যবহৃত হয়। KNN অ্যালগরিদম একটি পয়েন্টের শ্রেণী (বা মান) পূর্বাভাস করতে তার কাছের Kটি পয়েন্টের মধ্যে সবচেয়ে সাধারণ শ্রেণী (বা গড় মান) নির্বাচন করে।
KNN এর মৌলিক ধারণা
KNN মডেল মূলত এইভাবে কাজ করে:
- Training Phase: KNN মডেলে কোন প্রশিক্ষণ করা হয় না, কারণ এটি instance-based learning। এখানে, মডেলটি ডেটাসেটের সব পয়েন্টকে মনে রাখে। প্রশিক্ষণ পদ্ধতিটি কেবল ডেটা সংগ্রহ করে এবং কোনও মডেল তৈরি না করে।
- Prediction Phase: নতুন ইনপুটের জন্য, KNN অ্যালগরিদমটি সেই ইনপুট পয়েন্টের সবচেয়ে কাছের Kটি পয়েন্ট (কোম্পনেট পয়েন্ট) নির্বাচন করে এবং তাদের মধ্যে সবচেয়ে সাধারণ ক্লাস বা গড় মূল্য গ্রহণ করে।
KNN মডেল Training এবং Prediction এর ধাপগুলো
১. ডেটাসেট লোড এবং প্রি-প্রসেসিং
KNN মডেল তৈরির প্রথম ধাপ হল ডেটাসেট লোড করা এবং প্রি-প্রসেসিং করা। এখানে ডেটা স্কেলিং গুরুত্বপূর্ণ, কারণ KNN পদ্ধতিতে দূরত্বের হিসাব করা হয়।
২. KNN মডেল Training
KNN মডেল training পদ্ধতির মধ্যে ডেটা ব্যবহার করে কোনও মডেল তৈরি করা হয় না। এই পদ্ধতিতে শুধুমাত্র ডেটাসেটের তথ্য রাখা হয় এবং মডেলটির সমস্ত পয়েন্টকে মনে রাখা হয়।
৩. KNN মডেল Prediction
নতুন ডেটা আসলে, KNN মডেলটি ইনপুট পয়েন্টের সবচেয়ে কাছের Kটি পয়েন্ট নির্বাচন করে এবং তাদের মধ্যে সবচেয়ে সাধারণ শ্রেণী বা গড় মান নির্বাচন করে।
KNN মডেল Training এবং Prediction উদাহরণ
আমরা scikit-learn লাইব্রেরি ব্যবহার করে KNN মডেল তৈরি এবং পূর্বাভাস দিচ্ছি। উদাহরণ হিসেবে, আমরা Iris ডেটাসেট ব্যবহার করব।
১. ডেটাসেট লোড এবং প্রি-প্রসেসিং:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# Iris ডেটাসেট লোড করা
data = load_iris()
X = data.data # ইনপুট ফিচার
y = data.target # টার্গেট ক্লাস
# ডেটা প্রি-প্রসেসিং (স্ট্যান্ডার্ড স্কেলিং)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# ডেটা ভাগ করা (Train ও Test)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)
২. KNN মডেল Training:
# KNN মডেল তৈরি করা (K=5)
knn = KNeighborsClassifier(n_neighbors=5)
# ট্রেনিং ডেটা দিয়ে মডেল ট্রেনিং
knn.fit(X_train, y_train)
৩. KNN মডেল Prediction:
# টেস্ট ডেটার জন্য পূর্বাভাস করা
y_pred = knn.predict(X_test)
# পূর্বাভাসের একুরেসি পরিমাপ করা
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")
KNN মডেল এর বিভিন্ন টিউনিং:
- K এর মান নির্বাচন:
KNN মডেলের জন্য একটি গুরুত্বপূর্ণ প্যারামিটার হল K, অর্থাৎ কতটি নিকটতম পয়েন্ট ব্যবহার করা হবে। সাধারণত, K-এর মানটি odd (অদ্বিতীয়) রাখা ভালো, যাতে শ্রেণী ফ্লিপিংয়ের সম্ভাবনা কম থাকে। - ডিস্টেন্স মেট্রিক্স:
KNN ডিস্টেন্স মেট্রিক্স হিসাবে সাধারণত Euclidean distance ব্যবহার করে, তবে Manhattan distance বা অন্যান্য মেট্রিক্সও ব্যবহার করা যেতে পারে।
knn = KNeighborsClassifier(n_neighbors=5, metric='manhattan')
- ওজন (Weights):
KNN মডেলে প্রতিটি প্রতিবেশীর জন্য ওজন দেয়া যেতে পারে। কিছু ক্ষেত্রে uniform weights ব্যবহার করা হয়, যেখানে প্রতিটি প্রতিবেশীর জন্য সমান গুরুত্ব দেওয়া হয়, আবার distance weights ব্যবহার করলে দূরবর্তী প্রতিবেশীদের কম গুরুত্ব দেওয়া হয়।
knn = KNeighborsClassifier(n_neighbors=5, weights='distance')
KNN মডেল এর সুবিধা এবং অসুবিধা
সুবিধা:
- সহজ এবং কার্যকরী: KNN একটি সহজ এবং কার্যকরী অ্যালগরিদম, যা কম্পিউটেশনালভাবে সহজ।
- অপারেশনাল স্টেপস নেই: KNN মডেল ট্রেনিং করার জন্য কোনও গুরুতর প্রশিক্ষণ প্রক্রিয়া নেই, শুধু ডেটা লোড করা হয়।
- নন-প্যারামেট্রিক: এটি একটি নন-প্যারামেট্রিক মডেল, অর্থাৎ এটি কোনো নির্দিষ্ট ফাংশনকে অনুমান করে না, যা ফ্লেক্সিবিলিটি প্রদান করে।
অসুবিধা:
- কম্পিউটেশনাল খরচ: ডেটাসেট বড় হলে, নতুন ডেটার জন্য প্রতিবার সমস্ত ডেটা পরীক্ষা করা সময়সাপেক্ষ এবং ব্যয়বহুল হতে পারে।
- কোরিলেশন: KNN পদ্ধতিটি উচ্চ মাত্রার ডেটায় কার্যকরী নয় (high dimensional data), যেহেতু curse of dimensionality এড়ানো সম্ভব হয় না।
সারাংশ
K-Nearest Neighbors (KNN) একটি সহজ এবং জনপ্রিয় মেশিন লার্নিং অ্যালগরিদম, যা classification এবং regression উভয় কাজের জন্য ব্যবহার করা যায়। KNN মডেলটি ডেটার কাছের Kটি পয়েন্টের উপর ভিত্তি করে পূর্বাভাস প্রদান করে। এতে মডেল ট্রেনিংয়ের জন্য কোনও প্রশিক্ষণ প্রক্রিয়া নেই, তবে পূর্বাভাসের জন্য পুরো ডেটাসেট পরীক্ষা করা হয়, যা কখনও কখনও ধীরগতির হতে পারে। KNN মডেলের পারফরম্যান্স এবং টিউনিংয়ের জন্য K এবং distance metric এর প্যারামিটারগুলি গুরুত্বপূর্ণ।
Model Tuning (মডেল টিউনিং) এবং Hyperparameter Optimization (হাইপারপ্যারামিটার অপটিমাইজেশন) মেশিন লার্নিং মডেল তৈরির গুরুত্বপূর্ণ অংশ। মডেল টিউনিং হল মডেলের পারফরম্যান্স উন্নত করার প্রক্রিয়া, যেখানে hyperparameters এর মান নির্বাচন এবং অপটিমাইজ করা হয়। এই প্রক্রিয়াটি মডেলের গুণগত মান বৃদ্ধি করতে সাহায্য করে, যেমন একুরেসি, ফিনিক্স, রিকল এবং অন্যান্য পরিমাপ।
Model Tuning (মডেল টিউনিং)
Model Tuning হল মডেলটির কার্যকারিতা এবং দক্ষতা বৃদ্ধি করার প্রক্রিয়া, যাতে এটি নতুন বা অজ্ঞাত ডেটার উপর ভাল পারফর্ম করতে পারে। এটি সাধারণত hyperparameters এবং algorithmic choices পরিবর্তন করে করা হয়।
Model Tuning-এ গুরুত্বপূর্ণ পদক্ষেপ:
- হাইপারপ্যারামিটার নির্বাচন:
মডেলটি শেখার সময় বিভিন্ন প্যারামিটার নির্ধারণ করতে হয়, যেগুলি মডেলের আচরণ ও কার্যকারিতা প্রভাবিত করে। যেমন, একটি র্যান্ডম ফরেস্ট মডেলের জন্য নম্বর অব ট্রিজ এবং ডিপথ বা SVM এর জন্য C এবং Gamma। - ডেটার স্কেলিং:
ডেটার বিভিন্ন ফিচারের স্কেলিং পরিবর্তন করে মডেলটির কার্যকারিতা বৃদ্ধি করা যেতে পারে। যেমন, StandardScaler বা MinMaxScaler ব্যবহার করে ডেটার স্কেলিং করা। - অ্যালগরিদম নির্বাচন:
বিভিন্ন অ্যালগরিদমের মধ্যে নির্বাচন করা, যেমন Decision Trees, SVM, Logistic Regression ইত্যাদি, যা সমস্যা অনুযায়ী পারফরম্যান্স বৃদ্ধি করতে সাহায্য করে।
Hyperparameter Optimization (হাইপারপ্যারামিটার অপটিমাইজেশন)
Hyperparameter Optimization বা Hyperparameter Tuning হল সেই প্রক্রিয়া, যার মাধ্যমে মডেলের শিখন প্রক্রিয়া নিয়ন্ত্রণকারী বিভিন্ন hyperparameters এর সর্বোত্তম মান খোঁজা হয়। Hyperparameters হল সেই প্যারামিটারগুলি, যা মডেল ট্রেনিংয়ের আগে সেট করা হয় এবং যা ট্রেনিংয়ের সময় পরিবর্তিত হয় না। এগুলির মধ্যে রয়েছে:
- Learning rate
- Number of trees in a random forest
- Depth of a decision tree
- Regularization parameters (e.g., C in SVM, alpha in Ridge regression)
Hyperparameter Tuning করার পদ্ধতি:
Grid Search (গ্রিড সার্চ): গ্রিড সার্চ হল সবচেয়ে সাধারণ এবং পদ্ধতিগত পদ্ধতি, যেখানে hyperparameter এর সম্ভাব্য সমস্ত মানের একটি গ্রিড তৈরি করা হয় এবং প্রতিটি কম্বিনেশন পরীক্ষণ করা হয়।
উদাহরণ:
from sklearn.model_selection import GridSearchCV from sklearn.ensemble import RandomForestClassifier param_grid = { 'n_estimators': [10, 50, 100], 'max_depth': [None, 10, 20, 30] } grid_search = GridSearchCV(estimator=RandomForestClassifier(), param_grid=param_grid, cv=5) grid_search.fit(X_train, y_train) print("Best parameters found: ", grid_search.best_params_)Randomized Search (র্যান্ডমাইজড সার্চ): র্যান্ডমাইজড সার্চে, বিভিন্ন hyperparameters এর মান এলোমেলোভাবে নির্বাচন করা হয় এবং সীমিত সংখ্যক কম্বিনেশন পরীক্ষা করা হয়, যা সময় সাশ্রয়ী হতে পারে, বিশেষত যখন প্যারামিটার স্পেস অনেক বড় হয়।
উদাহরণ:
from sklearn.model_selection import RandomizedSearchCV from sklearn.ensemble import RandomForestClassifier import numpy as np param_dist = { 'n_estimators': np.arange(10, 100, 10), 'max_depth': [None, 10, 20, 30], 'min_samples_split': [2, 5, 10] } random_search = RandomizedSearchCV(estimator=RandomForestClassifier(), param_distributions=param_dist, n_iter=100, cv=5) random_search.fit(X_train, y_train) print("Best parameters found: ", random_search.best_params_)- Bayesian Optimization (বায়েসিয়ান অপটিমাইজেশন): বায়েসিয়ান অপটিমাইজেশন একটি পরিসংখ্যানিক পদ্ধতি যা Gaussian Processes এর উপর ভিত্তি করে কাজ করে এবং এটি পারফরম্যান্স মেট্রিক্স অনুসারে সবচেয়ে কার্যকরী hyperparameters নির্বাচন করতে সহায়ক।
- Automated Hyperparameter Tuning (অটোমেটেড হাইপারপ্যারামিটার টিউনিং): কিছু লাইব্রেরি যেমন Optuna, Hyperopt ব্যবহার করে স্বয়ংক্রিয়ভাবে হাইপারপ্যারামিটার অপটিমাইজেশন করা সম্ভব। এগুলি বায়েসিয়ান অপটিমাইজেশন এবং অন্যান্য উন্নত অ্যালগরিদমের মাধ্যমে দ্রুত এবং দক্ষভাবে hyperparameter tuning করতে পারে।
Model Tuning এবং Hyperparameter Optimization এর সুবিধা:
- পারফরম্যান্স বৃদ্ধি:
সঠিক হাইপারপ্যারামিটার নির্বাচন এবং মডেল টিউনিংয়ের মাধ্যমে মডেলের পারফরম্যান্স উন্নত করা যায়। এটি মডেলকে নতুন ডেটা বা অজ্ঞাত ডেটার উপরও ভালো ফলাফল দিতে সহায়ক। - সর্বোত্তম মডেল নির্বাচন:
বিভিন্ন মডেল এবং তাদের হাইপারপ্যারামিটার কম্বিনেশন পরীক্ষা করে সর্বোত্তম মডেল নির্বাচন করা যায়। - ফাস্টার কনvergence:
হাইপারপ্যারামিটার অপটিমাইজেশনের মাধ্যমে শিখন প্রক্রিয়া দ্রুততর এবং কার্যকরী হতে পারে, যা মডেলের ফলাফল আরও সঠিক করতে সাহায্য করে।
সারাংশ
Model Tuning এবং Hyperparameter Optimization হলো মেশিন লার্নিং মডেল তৈরি এবং পরিমার্জনের গুরুত্বপূর্ণ ধাপ। মডেল টিউনিংয়ের মাধ্যমে মডেলের দক্ষতা বৃদ্ধি করা যায় এবং হাইপারপ্যারামিটার অপটিমাইজেশন নিশ্চিত করে যে, মডেলটি সেরা ফলাফল প্রদান করবে। গ্রিড সার্চ, র্যান্ডম সার্চ, বায়েসিয়ান অপটিমাইজেশন ইত্যাদি পদ্ধতির মাধ্যমে এই প্রক্রিয়া করা যেতে পারে।
Read more